﻿/**
 * 定义表格类型。
 */
Ext.define('Happy.metadata.template.DefineGrid', {
    alias: 'template.define-grid',
    requires: [
        'Happy.grid.metadata.Panel',
        'Happy.tree.metadata.Panel'
    ],

    /**
     * 执行运行时代码生成。
     * 
     * @param {Happy.metadata.ClassGenerator} generator
     * @param {Happy.metadata.Metadata} metadata
     */
    generate: function (generator, metadata) {
        var me = this;

        me.defineGrid(generator, metadata);
        if (metadata.isTree()) {
            me.defineTreeGrid(generator, metadata);
        }
    },

    /**
     * 定义表格类型。
     * 
     * @private
     * @param {Happy.metadata.ClassGenerator} generator
     * @param {Happy.metadata.Metadata} metadata
     */
    defineGrid: function (generator, metadata) {
        var classConfig = {
            extend: 'Happy.grid.metadata.Panel',
            alias: 'widget.' + metadata.getGridClassAlias(),

            metadata: metadata
        };
        Ext.merge(classConfig, metadata.data.grid || {});
        Ext.define(metadata.getGridClassName(), classConfig);
    },

    /**
     * 定义树形表格类型。
     * 
     * @private
     * @param {Happy.metadata.ClassGenerator} generator
     * @param {Happy.metadata.Metadata} metadata
     */
    defineTreeGrid: function (generator, metadata) {
        var classConfig = {
            extend: 'Happy.tree.metadata.Panel',
            alias: 'widget.' + metadata.getTreeGridClassAlias(),

            metadata: metadata
        };
        Ext.merge(classConfig, metadata.data.treeGrid || {});
        Ext.define(metadata.getTreeGridClassName(), classConfig);
    }
});